package com.dating.base.service;

import java.util.List;

import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.QueryResult;
import org.nutz.dao.impl.sql.callback.QueryEntityCallback;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;

import com.dating.base.bean.Role;
import com.dating.base.bean.User.Type;
import com.dating.base.dao.RoleDao;
import com.dating.base.dto.Pager;
import com.dating.utils.StrKit;

@IocBean
public class RoleService {

	@Inject
	private RoleDao roleDao ;
	
	@Inject
	private Dao  dao ;
	
	
	/**
	 * 根据id查找角色
	 * @param id
	 * @return
	 */
	public Role findByid(int id){
		return roleDao.findById(id);
	}
	
	
	/**
	 * 查找所有角色
	 * @return
	 */
	public List<Role> getAllRoles() {
		return roleDao.findAll();
	}
	
	/**
	 * 查找所有角色
	 * @return
	 */
	public List<Role> getAllByParam(String key) {
		if(StrKit.notBlank(key)){
			return roleDao.search(Cnd.where("name", "like", "%"+key+"%").or("description", "like", "%"+key+"%"));
		}else{
			return roleDao.findAll();
		}
	}
	
	/**
	 * 根据角色key查询
	 * @param name
	 * @return
	 */
	public Role findByName(String name){
		return roleDao.findByCondition(Cnd.where("name", "=", "name"));
	}
	

	/**
	 * 分页查询角色
	 * @param pager
	 * @return
	 */
	public QueryResult findAllByPage(Pager pager){
		List<Role> list = dao.query(Role.class, null, pager);
		pager.setRecordCount(dao.count(Role.class, null));
		return new QueryResult(list, pager);
	}
	
	/**
	 * 添加角色
	 * @param role
	 */
	public void save(Role role){
		roleDao.save(role);
	}
	
	/**
	 * 批量删除角色
	 * @param ids
	 * @return
	 */
	public int batchDel(String ids){
		return dao.clear(Role.class, Cnd.where("id","in", ids.split("\\,")).and("installed", "=", false));
	}
	
	/**
	 * 更新角色
	 * @param role
	 * @return
	 */
	public boolean update(Role role){
		return roleDao.update(role);
	}
	
	/**
	 * 更新角色
	 * @param role
	 * @return
	 */
	public boolean updateIgnoreNull(Role role){
		return roleDao.updateIgnoreNull(role);
	}
	

	/**
	 * 根据用户id查寻用户的角色
	 * @param userId
	 * @param userType
	 * @return
	 */
	public List<Role> findByUserId(Integer userId, Type userType){
		Sql sql = dao.sqls().create("find.role.by.user.id");
		// 注入sql参数
		sql.params().set("userid", userId);
		sql.params().set("type", userType);
		sql.setEntity(dao.getEntity(Role.class));
		sql.setCallback(new QueryEntityCallback());
		dao.execute(sql);
		return sql.getList(Role.class);
	}
	
	
	/**
	 * 判断用户是否是管理员
	 * @param userId
	 * @param userType
	 * @return
	 */
	public boolean isAdmin(Integer userId , Type userType){
		boolean isAdmin = false ;
		List<Role> roles = findByUserId(userId, userType);
		for (Role role : roles) {
			if("admin".equals(role.getName())){
				isAdmin = true ;
				break;
			}
		}
		return isAdmin;
	}
}
